# coding:utf-8
__author__ = "Xuhao"

from lxml import etree

from app.spiders.HtmlDownloader import Html_Downloader
from app.config import RULES
from app.config import CONTENTFILTER
import re


class Html_Parser(object):



    def XpathPraser(self, response, rules):
        '''
        这里只适用于收集书籍名称，和来源
        :param response: 请求响应结果
        :param rules: 解析规则
        :return:
        '''

        bookList = []
        root = etree.HTML(response)
        books = root.xpath(rules['pattern'])
        for book in books:
            try:
                bookName = book.xpath(rules['position']['bookName'])[0].text.strip()
                bookUrl = book.xpath(rules['position']['bookUrl'])[0]
                if rules['url'] == 'http://www.suimeng.la//':
                    bookNewChapter = book.xpath(rules['position']['newChapterName'])[0].text.strip()
                    bookNewChapterUrl = book.xpath(rules['position']['newChapterUrl'])[0]
                    try:
                        str = book.xpath(rules['position']['bookAuthor'])[0].text
                        bookAuthor = re.findall(r'.*?作者：(.*?)类型', str, re.S)[0].strip()
                    except Exception as e:
                        try:
                            bookAuthor = book.xpath(rules['position']['bookAuthor'] + '/a')[0].text
                        except Exception as e:
                            continue
                else:
                    bookNewChapter = book.xpath(rules['position']['newChapterName'])[0].text.strip()
                    bookNewChapterUrl = book.xpath(rules['position']['newChapterUrl'])[0]
                    bookAuthor = book.xpath(rules['position']['bookAuthor'])[0].text.strip()

                novel = {'bookName': bookName, 'bookAuthor': bookAuthor, 'bookUrl': bookUrl,
                         'bookDataName': '', 'bookNewChapter': '', 'bookUpdate': '',
                         'bookCategory': 3, 'bookType': '', 'bookNewChapter': bookNewChapter,
                         'bookNewChapterUrl': bookNewChapterUrl
                         }
                bookList.append(novel)
            except Exception as e:
                print(e)
                continue

        return bookList
            # response = Html_Downloader.download(bookUrl)
            # if response is not None:
            #     self.ChapterXpathPraser(bookUrl, response, rules)

    def ChapterXpathPraser(self, url, response, rules):
        '''
        解析小说章节，和章节内容
        :param url:
        :param response:
        :param rules:
        :return: 返回所有章节URL，和内容
        '''
        root = etree.HTML(response)
        listmain = root.xpath(rules['chapter_selector'])
        chapterList = []
        for i in range(0, len(listmain)):
            list = listmain[i]
            try:
                #判断小说章节URL解析方式
                if rules['urlConnectType'] == '2':#表示用域名拼接
                    tmp = list.xpath(rules['chapter_position']['chapterUrl'])[0]
                    chapterUrl = rules['url'] + tmp
                elif rules['urlConnectType'] == '1': #表示章节链接使用自身自带的URL
                    chapterUrl = list.xpath(rules['chapter_position']['chapterUrl'])[0]
                elif rules['urlConnectType'] == '0':#表示章节链接需要用当前页面URL拼接
                    chapterUrl = url + list.xpath(rules['chapter_position']['chapterUrl'])[0]
                chapterName =  list.xpath(rules['chapter_position']['chapterName'])[0].text.strip()
                novels = {'chapterName': chapterName,
                          'chapterID': i,
                          'chapterUrl': chapterUrl,
                          }
               # print(novels)
                chapterList.append(novels)
            except Exception as e:
                print(novels)
                continue

        return chapterList

    def contentXpathPraser(self, response, rules):
        '''
        解析小说内容
        :param response: 请求响应结果
        :param rules: 解析规则
        :return:
        '''
        root = etree.HTML(response)
        try:
            text = root.xpath(rules['content_selector'])
            string = ""
            for tmp in text:
                string += re.sub(CONTENTFILTER, '', tmp)
            str = re.sub(rules['filter'], '', string)
            return str
        except BaseException as e:
            print(e)



if __name__ == "__main__":
    url = "http://www.suimeng.la/files/article/html/123/123436/"
    #
    # resonse = Html_Downloader.download(url)
    #
    # print(resonse)
    html_parser = Html_Parser()



    resonse = '''
    
    <!doctype html>
<html>
<head>
<script type="text/javascript" src="/m.js"></script>
<meta http-equiv="Cache-Control" content="no-siteapp" />
<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="龙王传说,龙王传说在线阅读,龙王传说全文,龙王传说最新,唐家三少,都市言情 ,随梦小说网" />
<meta name="description" content="龙王传说， 第一千五百五十七章 超聚能魂导阵列防御系统。" />
<meta name="generator" content="http://www.suimeng.la" />
<title> 第一千五百五十七章 超聚能魂导阵列防御系统 - 龙王传说 - 随梦小说网</title>
<link rel="stylesheet" href="/themes/suimeng/style.css" type="text/css" media="all" />
<!--[if lt IE 9]><script type="text/javascript" src="/scripts/html5.js"></script><![endif]-->
<!--[if lt IE 9]><script type="text/javascript" src="/scripts/css3-mediaqueries.js"></script><![endif]--> 
<script type="text/javascript" src="/scripts/common.js"></script>
<script type="text/javascript" src="/scripts/theme.js"></script>
<script type="text/javascript">
<!--
var preview_page = "33653336.html";
var next_page = "33657825.html";
var index_page = "./";
var article_id = "105683";
var chapter_id = "33655071";
var article_name = "龙王传说";
var chapter_name = " 第一千五百五十七章 超聚能魂导阵列防御系统";
function jumpPage() {
  var event = document.all ? window.event : arguments[0];
  if (event.keyCode == 37) document.location = preview_page;
  if (event.keyCode == 39) document.location = next_page;
  if (event.keyCode == 13) document.location = index_page;
}
document.onkeydown=jumpPage;
-->
</script>

</head>

<body>

<div class="top cf">
	<div class="main">
	<div class="fl">
	<a href="/shortcut.php"><span class="iconfont">&#xee27;</span>将随梦小说网下载到桌面</a> &nbsp;
	<a href="javascript:window.external.addFavorite('http://www.suimeng.la','随梦小说网 - 小说TXT全集下载,最好最快的免费小说阅读网')"><span class="iconfont">&#xee53;</span>收藏本站</a>
	</div>
	<div class="fr"><script type="text/javascript" src="/scripts/toplink.js"></script></div>
	</div>
</div>
<div class="topbg cf">
<div class="main header cf">
	<div class="row cf">
		<h1 class="col3 logo">
			<a href="http://www.suimeng.la/"><img src="/themes/suimeng/logo.gif" border="0" alt="随梦小说网" /></a>
		</h1>
		<div class="col9 last banner">
			<div class="bansearch">
			<form name="t_frmsearch" method="post" action="http://www.suimeng.la/modules/article/search.php">
			<div class="bsboard">
			<select name="searchtype" class="bstype">
			<option value="articlename" selected="selected">书名</option>
			<option value="author">作者</option>
			</select>
			<input name="searchkey" type="text" class="bskey">
                <input name="t_btnsearch" type="submit" value="&#xee28;" class="bssubmit iconfont">
			</div>

			</form>
			</div>
            <div class="bantxt"><span class="gray">热门搜索：</span><a href="http://www.suimeng.la/files/article/html/99/99579/" target="_blank">雪鹰领主</a> <a href="http://www.suimeng.la/files/article/html/79/79658/" target="_blank">天火大道</a> <a href="http://www.suimeng.la/files/article/html/74/74406/" target="_blank">魔天记</a></div>
		</div>
	</div>
</div>

<div class="main mainnav cf">
	<ul class="fl">
	<li><a href="/">首页</a></li>
	<li><a href="/lastupdate-1.html">书库</a></li>
	<li><a href="/allvisit-1.html">排行</a></li>
	<li><a href="/sort/1-1.html">玄幻魔法</a></li>
	<li><a href="/sort/2-1.html">武侠修真</a></li>
	<li><a href="/sort/3-1.html">都市言情</a></li>
	<li><a href="/sort/4-1.html">历史军事</a></li>
	<li><a href="/sort/5-1.html">侦探推理</a></li>
	<li><a href="/sort/6-1.html">网游动漫</a></li>
	<li><a href="/sort/7-1.html">科幻小说</a></li>
	<li><a href="/sort/8-1.html">恐怖灵异</a></li>
	<li><a href="/sort/9-1.html">其他类型</a></li>
	</ul>
	<ul class="fr">
	<li class="dropdown"><a href="javascript:;" class="droplink"><i class="iconfont">&#xee50;</i>临时书架<b></b></a>
		<div class="dropbox">
		<script type="text/javascript" src="/scripts/json2.js"></script>
		<script type="text/javascript" src="/modules/article/scripts/readshow.js"></script>
		</div>
	</li>
	</ul>
</div>
</div>

<div class="mread">
<div class="headlink cf">
<div class="fl"><a href="/">随梦小说网</a> &gt; <a href="/sort/3-1.html" title="都市言情">都市言情</a> &gt; <a href="./">龙王传说</a> &gt;  第一千五百五十七章 超聚能魂导阵列防御系统</div>
<div class="fr"><a href="33653336.html">上一页</a> | <a href="./">返回书目</a> | <a href="33657825.html">下一页</a> | <a href="/modules/article/addbookcase.php?bid=105683&cid=33655071" target="_blank">加入书签</a> | <a href="/modules/article/uservote.php?id=105683" target="_blank">推荐本书</a></div>
</div>
<div class="cread" id="cread">
<div class="ctitle"> 第一千五百五十七章 超聚能魂导阵列防御系统</div>
<script type="text/javascript" src="/modules/article/scripts/pagehead.js"></script>
<div class="cnote"><a class="hot" href="/newmessage.php?tosys=1&title=龙王传说 -  第一千五百五十七章 超聚能魂导阵列防御系统 章节出错啦!&content=举报原因如下： " target="_blank">章节错误/点此举报</a></p>
<span class="hot">小贴士:页面上方临时书架会自动保存您本电脑上的阅读记录,无需注册</span></div>

<div class="ccontent" id="ccontent">&nbsp;&nbsp;&nbsp;&nbsp;当臧鑫这句话说出来的时候，哪怕是唐舞麟，都有种石破天惊的感觉。＊随＊梦＊小＊说 ＷwＷ.suimeng.lā作为联邦政府最核心的战力存在，战神殿竟然表态支持史莱克学院重建。这几乎是和联邦本身支持都没什么区别了。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;“这、这怎么可能？”联邦当然是不希望看到史莱克学院重现辉煌的，否则的话，当初也不会和传灵塔联手。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;弑神级定装魂导炮弹是那么容易偷走的？没有联邦内部的问题，打死唐舞麟也不相信。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;可现在战神殿竟然公开表示支持史莱克学院重建，这绝对是超重量级的，这意味着的事情已经超出了传灵塔的掌控，甚至超出了联邦的掌控。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;从臧鑫的表情中，唐舞麟也能看出一些端倪，“和龙老有关？”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;臧鑫嘿嘿一笑，“虽说战神殿之中和史莱克有关的人不少，甚至超过三分之一的人毕业于史莱克，但真正起到决定性作用的当然还是那位了。没有他的支持，哪里有那么容易。看起来，他这次是下定决心了。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;唐舞麟都忍不住笑了，老一代的感情纠葛还真的是错综复杂啊！<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;臧鑫说的当然是当代战神殿殿主，瀚海斗罗陈新杰，鹰派扛鼎大佬之一。他是联邦政府这边的最强者。战神殿被他经营了超过五十年，绝对的根深蒂固。在军方地位之中，无论是明镜斗罗还是天使斗罗，都还在他之下。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;陈新杰的表态，基本就意味着史莱克学院重建再不会有任何阻力。就算是传灵塔，也不敢得罪这位掌控着几乎联邦直管所有封号斗罗级强者的大佬啊！<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;有了瀚海斗罗的支持，可以说，一切都在朝着最好的方向发展，虽说唐门还没能被正名。但史莱克的重建一旦完成，并且进入正轨的话，同样也会反哺唐门。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;在重建的史莱克学院规划图之中，有一部分就是专门给唐门的。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;“这可真的是大好事了。史莱克重建总算能够进入正轨。”唐舞麟有些兴奋的说道。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;臧鑫点了点头，道：“还有另外一个好消息，唐门研制了超过百年的超聚能魂导阵列防御系统已经接近开发完毕的程度。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;唐舞麟听臧鑫讲过这套系统，绝对是当今大陆最高科技的产物，最初的研究，就是为了史莱克城的。是一种超级防御魂导器体系。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;简单来说，如果这套防御体系早一些研制出来并且建造完成的话，就不会有史莱克城那场大灾难了。这绝对可以称得上是终级防御了。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;“太好了。大概需要多久可以投入使用？”唐舞麟急切的追问道。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;臧鑫道：“没那么快，而且需要的资源太庞大了。以唐门的积累，想要完成以海神湖为中心的整体超聚能魂导阵列防御系统也要至少七年的时间。再加上各种设备的完善，没有十年是不可能的。而且，至少要消耗唐门三分之一到一半的资源。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;唐舞麟听的一阵咋舌，那可是唐门两万年的积累啊！竟然要消耗三分之一以上才能完成这套系统，这只能用恐怖来形容。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;臧鑫微微一笑，“但这是值得的，无论是唐门还是史莱克，都需要有一个安稳的大后方。不给任何小人有可趁之机。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;唐舞麟点了点头，“现在大陆资源匮乏，真的是个大难题。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;臧鑫道：“完成了这套系统之后，唐门的所有研究力量都会向两个方向发展，一个是环境恢复，一个是外太空探索。希望能够通过我们的努力，给咱们斗罗星寻找未来。现在是特殊时期，你这个唐门门主的精力都放在对外上，等史莱克重建完毕，唐门内部的一切我和老曹都会交给你，到时候你要费心的地方就更多了。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;唐舞麟苦笑道：“冕下，您可别都交给我。您就能者多劳吧。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;臧鑫笑道：“想都别想，我跟老曹都多大年纪了？有你们这些年轻人在，我们也该想想清福了。不过，有些事情还是要先做完才行。最近我们一直觉得有点怪异，圣灵教已经很久没有动静了。以他们的脾性，这很不正常。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;自从圣灵教复出之后，各种破坏活动、灾难不断。但最近这段时间确实是销声匿迹了。自从当初突袭过唐舞麟之后，可以说就再没有出现过，这次传灵塔的比武招亲大会，唐门和史莱克学院本来是防着有圣灵教强者出现的，但从始至终，却都没有遭遇过他们。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;唐舞麟眉头微蹙，道：“确实，好像是有点太安静了。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;臧鑫道：“星罗、斗灵两国那边也没有他们的动静，这种情况不正常，我们必须要多做准备。你现在已经是神匠了，四字斗铠要早点提上日程，如果有了四字斗铠，至少就能立于不败之地。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;“是。”唐舞麟点了点头，不只是他，同伴们的四字斗铠也都要开始准备了，唯一的问题就是，他自己的四字斗铠目前还打造不了，品质要求太高了，以他现在的水平还有些无法掌控。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;“好，你先休息吧。明天一早，我们离开。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;就像来的时候悄无声息一样，离开的时候也一样悄无声息。唐门和史莱克的人，通过各个渠道，悄然散去。而事实上，哪怕是联邦政府方面，虽然议会依旧没有为唐门正名的意思，但也没有缉拿。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;这个哑巴亏，传灵塔似乎就是这么吃了下来。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;靠在魂导高铁列车的贵宾包厢沙发上，唐舞麟看着窗外不断掠过的景物，难得的放空自身。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;在他对面，谢邂正把自己的头往原恩夜辉肩膀上靠，却被原恩夜辉嫌弃的推开。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;唐舞麟身边的二明则在大口大口的吃着一只从火车上买的烧鸡，吃的不亦乐乎。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;他们此行的目的地当然不是返回史莱克学院了，而是原恩夜辉的家。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;关于原恩夜辉自身的隐患，还是要早些解决为好。目前的原恩修为已经到了八环，虽然因为是双生武魂的缘故，她的堕落天使武魂对自身影响没有当初她母亲那么大，但这份影响也始终是存在的。二明已经表示了可以解决，但这件事原恩夜辉家里还不知道，需要当着原恩震天的面来完成这些才是最佳方案，这样才能为原恩夜辉在家族之中正名。同时，二明也希望能够回去认亲啊！<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;“你小子皮紧了是不是？”二明朝着谢邂瞪起了眼睛。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;谢邂嘿嘿一笑，“那不能。前辈，我现在也算是您半个徒弟了，又是半个后代女婿，我不努力，什么时候能为您传宗接代啊！”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;二明翻了个白眼，“你真是个没皮没脸的。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;谢邂大有几分不以为耻反以为荣的味道，“那是，要脸哪来的老婆。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;“谁是你老婆？”原恩夜辉翻了个白眼。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;谢邂咳嗽一声，“好、好，我不说了。不当着老大秀恩爱，省得刺激他。”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;唐舞麟扭了扭脖子，微微一笑，“谢邂，听二明前辈说，你最近进步很大啊！”<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;来源：手机雅库网<a href="http://m.yakuw.com" target="_blank">http://m.yakuw.com</a></div>

<div class="cnote">&nbsp;&nbsp;&nbsp;&nbsp;《<b><a href="index.html" title="龙王传说最新章节">龙王传说</a></b>》随梦小说网全文字更新,牢记我们新网址 :Www.SuiMeng.La </br>
</div>


<div class="cfoot">
<div class="tc"><script type="text/javascript" src="/modules/article/scripts/pagefoot.js"></script></div>

<a class="btnlink" href="33653336.html">上一页</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a class="btnlink" href="./">返回目录</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a class="btnlink" href="33657825.html">下一页</a>
<div class="main tc"><script type="text/javascript" src="/modules/article/scripts/pagebottom.js"></script></div>
<p style="padding:10px 0 5px 0;text-align:center;font-size:12px;">温馨提示：按 回车[Enter]键 返回书目，按 ←键 返回上一页，按 →键 进入下一页。</p>
</div>

</div>
</div>

<div class="leftfbar" id="leftfbar">
<ul>
<li><a href="./"><span class="iconfont">&#xee32;</span><i>返回<br />目录</i></a></li>
<li><a href="javascript:;"><span class="iconfont">&#xee26;</span><i>阅读<br />设置</i></a>
<div class="mrset" id="mrset"></div>
</li>
<li><a href="javascript:;"><span class="iconfont">&#xee7b;</span><i>手机<br />阅读</i></a>
<div class="mrewm" id="qrcode"></div>
</li>
<li><a target="_blank" href="/modules/article/addbookcase.php?bid=105683"><span class="iconfont">&#xee43;</span><i>加入<br />书架</i></a></li>
</ul>
</div>
<div class="rightfbar" id="rightfbar">
<ul>
<li><a target="_blank" href="/modules/article/addbookcase.php?bid=105683&cid=33655071"><span class="iconfont">&#xee60;</span><i>加入<br />书签</i></a></li>
<li><a target="_blank" href="/modules/article/uservote.php?id=105683"><span class="iconfont">&#xee5d;</span><i>推荐<br />本书</i></a></li>
</ul>
</div>

<script type="text/javascript" src="/modules/article/scripts/readset.js"></script>
<script type="text/javascript" src="/modules/article/scripts/readlog.js"></script>
<script type="text/javascript" src="/scripts/jquery.min.js"></script>
<script type="text/javascript" src="/scripts/qrcode.min.js"></script>
<script type="text/javascript">
	var qrcode = new QRCode("qrcode", {
	text: "http://m.suimeng.la/z/"+Math.floor(article_id / 1000)+"/"+article_id+"/",
	width: 128,
	height: 128,
	colorDark : "#000000",
	colorLight : "#ffffff",
	correctLevel : QRCode.CorrectLevel.H
	});
</script>
<script type="text/javascript" src="/modules/article/scripts/pageend.js"></script>

<div class="footer">
	<div class="main">
		<h6 class="fb tc">重要声明</h6>
          <p>本站所有的文章、图片、评论等，均由网友发表或上传并维护或收集自网络，属个人行为，与随梦小说网立场无关。</p>
          <p>如果侵犯了您的权利，请与我们联系，我们将在24小时之内进行处理。任何非本站因素导致的法律后果，本站均不负任何责任。</p>
          <p>联系我们: admin#suimeng.la(@替换#)</p>
          <p>湘ICP备11006904号-1 &copy; 2015 www.suimeng.la &nbsp<script type="text/javascript" src="/js/tongji.js"></script></p>
	</div>
</div>

</body>
</html>
    '''

    list = html_parser.contentXpathPraser(response=resonse,rules=RULES[1])
    #list = html_parser.ChapterXpathPraser(url=url, response=resonse, rules=RULES[1])

    print(list)
